import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.Scanner;

//输入一个路径,再输入一个查询词,搜索这个路径中,文件内容,包含这个查询词这里的文件
//查询文件内的内容 但是效率比较低
//写代码不要让单个方法的逻辑太复杂(尤其是递归)
public class Demo2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要搜索的路径: ");
        String path = scanner.next();
        System.out.println("请输入要查询的词: ");
        String searchWord = scanner.next();

        File rootFile = new File(path);
        if(!rootFile.isFile()){
            System.out.println("当前输入路径非法!");
            return;
        }

        search(rootFile,searchWord);
    }

    private static void search(File rootFile,String searchWord){
        //先列出所有的文件
        File[] files = rootFile.listFiles();
        if(files==null){
            //空目录,递归结束条件
            return;
        }
        for (File f:files){
            if(f.isFile()){
                //表示是文件,然后对文件内容进行读取搜索
                matchWord(f,searchWord);
            } else if (f.isDirectory()) {
                //表示是目录 递归的判定,搜素子目录
                search(f,searchWord);
            }
        }
    }

    private static void matchWord(File f,String searchWord){
        //读文件内容,再进行匹配
        try(Reader reader = new FileReader(f)) {
            //把读到的结果构造到 StringBuilder 里面
            StringBuilder stringBuilder = new StringBuilder();
            while (true){
                int c = reader.read();
                if(c==-1){
                    break;
                }
                stringBuilder.append(c);//只要找到一个字符,就将字符放入 StringBuilder 里面
            }
            //循环结束,文件所有内容都进入到 StringBuilder
            if(stringBuilder.indexOf(searchWord)>=0){
                //找到了内容
                System.out.println("找到了内容: "+f.getAbsolutePath());
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}
